%pylab inline
import pandas as pd
import numpy as np
import nbimporter
from src.funciones import get_datos_simulados,analisis_vacios,leer_archivo, entrenar_modelo,llenar_serie,calcular_correlacion
# librerias para el procesamiento
# leer el archivo con la información de la estaciones
archivo = pd.ExcelFile('ESTACIONES.xlsx')
# el orden de las estaciones esta en base al número de años (de mayor a menor)
# P120 datos de 1930 a 2006
# P364 datos de 1963 a 2006
# P349 datos de 1964 a 1986
# P043 datos de 1963 a 1982
# P121 datos de 1978 a 2000
# P532 datos de 1965 a 1983
# P622 datos de 1967 a 1975
todas_estaciones = ['P120','P364','P349','P043','P121','P532','P622']
datos = leer_archivo(archivo,todas_estaciones)
# graficar toda la serie de datos.
# subplot = permite graficar cada serie de manera independiente
# plt.legend = ubicacion de la leyenda
# figsize = relación de aspecto del grÔfico
# xticks = Rotación del texto del eje x
datos.loc[:,todas_estaciones].plot(subplots=True, figsize=(18, 12)); plt.legend(loc='best')
xticks(rotation='vertical')
#### Analizar los datos conforme se rellenan
# Periodo de datos para la predicción
inicio = '1963-01-01'
final = '2006-12-01'
rango_prediccion = [inicio,final]
# DataFrame para los datos simulados
datos_simulados = datos.loc[inicio:final,:].copy()
# Graficar los datos
datos_simulados.loc[:,todas_estaciones].plot(subplots=True, figsize=(18, 12)); plt.legend(loc='best')
xticks(rotation='vertical')
# Resumen de vacios en la serie de prediccion
analisis_vacios(datos_simulados,rango_prediccion,todas_estaciones)
# Calcular correlacion entre estaciones
calcular_correlacion(datos_simulados.loc[:,todas_estaciones])
### Excepcion
datos_simulados['P364'] = datos_simulados['P364'].fillna(datos_simulados['P364'].mean())
#### Encontrar el periodo que tenga casi toda la serie completa en las tres estaciones
# Periodo de datos para analisis
inicio = '1967-11-01'
final = '1975-05-01'
rango_analisis = [inicio,final]
#seleccionar las estaciones a intervenir
estaciones_train = ['P043','P622','P120']
# Resumen de vacios en la serie de analisis
analisis_vacios(datos_simulados,rango_analisis,estaciones_train)
# Graficar la serie de analisis
datos_simulados.loc[inicio:final,estaciones_train].plot(subplots=True, figsize=(18, 12)); plt.legend(loc='best')
xticks(rotation='vertical')
#### Entrenar el modelo para la predicción
# Llenar la serie de datos con los valores promedio
datos_procesar = llenar_serie(datos_simulados,rango_analisis,todas_estaciones)
# entrenar el modelo con tres estaciones para predecir datos
model = entrenar_modelo(datos,datos_procesar,estaciones_train,rango_analisis)
#### Obtener los datos simulados con base al modelo de prediccion
inicio = rango_prediccion[0]
final = rango_prediccion[1]
serie_simulada = pd.DataFrame()
### excepcion por no tener datos en el periodo de relleno
estaciones_train = ['P364','P364','P120']
# generar datos simulados
serie_simulada = get_datos_simulados(model,datos_simulados,estaciones_train,rango_prediccion)
if len(serie_simulada)>0:
datos_simulados[estaciones_train[2]] = serie_simulada
#graficar los datos de predicción
#plot(datos.loc[inicio:final].index,serie_simulada,label='Simulado')
datos_simulados.loc[:,estaciones_train[2]].plot(label='Relleno')
#graficar los datos de est3
datos.loc[inicio:final,estaciones_train[2]].plot(figsize=(18, 6),); plt.legend(loc='best')
#### Analizar los datos conforme se rellenan
# Periodo de datos para la predicción
inicio = '1963-01-01'
final = '2006-12-01'
rango_prediccion = [inicio,final]
# Graficar los datos
datos_simulados.loc[:,todas_estaciones].plot(subplots=True, figsize=(18, 12)); plt.legend(loc='best')
xticks(rotation='vertical')
# Resumen de vacios en la serie de prediccion
analisis_vacios(datos_simulados,rango_prediccion,todas_estaciones)
# Calcular correlacion entre estaciones
calcular_correlacion(datos_simulados.loc[:,todas_estaciones])
#### Encontrar el periodo que tenga casi toda la serie completa en las tres estaciones
# Periodo de datos para analisis
inicio = '1967-09-01'
final = '1973-07-01'
rango_analisis = [inicio,final]
#seleccionar las estaciones a intervenir
estaciones_train = ['P532','P364','P622']
# Resumen de vacios en la serie de analisis
analisis_vacios(datos_simulados,rango_analisis,estaciones_train)
# Graficar la serie de analisis
datos_simulados.loc[inicio:final,estaciones_train].plot(subplots=True, figsize=(18, 12)); plt.legend(loc='best')
xticks(rotation='vertical')
#### Entrenar el modelo para la predicción
# Regresar los datos a los valores originales
datos_simulados[estaciones_train[2]] = datos[estaciones_train[2]]
# Llenar la serie de datos con los valores promedio
datos_procesar = llenar_serie(datos_simulados,rango_analisis,todas_estaciones)
# entrenar el modelo con tres estaciones para predecir datos
model = entrenar_modelo(datos,datos_procesar,estaciones_train,rango_analisis)
#### Obtener los datos simulados con base al modelo de prediccion
inicio = rango_prediccion[0]
final = rango_prediccion[1]
serie_simulada = pd.DataFrame()
### excepcion por no tener datos en el periodo de relleno
estaciones_train = ['P120','P364','P622']
# generar datos simulados
serie_simulada = get_datos_simulados(model,datos_simulados,estaciones_train,rango_prediccion)
if len(serie_simulada)>0:
datos_simulados[estaciones_train[2]] = serie_simulada
#graficar los datos de predicción
#plot(datos.loc[inicio:final].index,serie_simulada,label='Simulado')
datos_simulados.loc[:,estaciones_train[2]].plot(label='Relleno')
#graficar los datos de est3
datos.loc[inicio:final,estaciones_train[2]].plot(figsize=(18, 6),); plt.legend(loc='best')
#### Analizar los datos conforme se rellenan
# Periodo de datos para la predicción
inicio = '1963-01-01'
final = '2006-12-01'
rango_prediccion = [inicio,final]
# Graficar los datos
datos_simulados.loc[:,todas_estaciones].plot(subplots=True, figsize=(18, 12)); plt.legend(loc='best')
xticks(rotation='vertical')
# Resumen de vacios en la serie de prediccion
analisis_vacios(datos_simulados,rango_prediccion,todas_estaciones)
# Calcular correlacion entre estaciones
calcular_correlacion(datos_simulados.loc[:,todas_estaciones])
#### Encontrar el periodo que tenga casi toda la serie completa en las tres estaciones
# Periodo de datos para analisis
inicio = '1963-05-01'
final = '1975-06-01'
rango_analisis = [inicio,final]
#seleccionar las estaciones a intervenir
estaciones_train = ['P120','P364','P043']
# Resumen de vacios en la serie de analisis
analisis_vacios(datos_simulados,rango_analisis,estaciones_train)
# Graficar la serie de analisis
datos_simulados.loc[inicio:final,estaciones_train].plot(subplots=True, figsize=(18, 12)); plt.legend(loc='best')
xticks(rotation='vertical')
#### Entrenar el modelo para la predicción
# Regresar los datos a los valores originales
datos_simulados[estaciones_train[2]] = datos[estaciones_train[2]]
# Llenar la serie de datos con los valores promedio
datos_procesar = llenar_serie(datos_simulados,rango_analisis,todas_estaciones)
# entrenar el modelo con tres estaciones para predecir datos
model = entrenar_modelo(datos,datos_procesar,estaciones_train,rango_analisis)
#### Obtener los datos simulados con base al modelo de prediccion
inicio = rango_prediccion[0]
final = rango_prediccion[1]
serie_simulada = pd.DataFrame()
### excepcion por no tener datos en el periodo de relleno
estaciones_train = ['P120','P364','P043']
# generar datos simulados
serie_simulada = get_datos_simulados(model,datos_simulados,estaciones_train,rango_prediccion)
if len(serie_simulada)>0:
datos_simulados[estaciones_train[2]] = serie_simulada
#graficar los datos de predicción
#plot(datos.loc[inicio:final].index,serie_simulada,label='Simulado')
datos_simulados.loc[:,estaciones_train[2]].plot(label='Relleno')
#graficar los datos de est3
datos.loc[inicio:final,estaciones_train[2]].plot(figsize=(18, 6),); plt.legend(loc='best')
#### Analizar los datos conforme se rellenan
# Periodo de datos para la predicción
inicio = '1963-01-01'
final = '2006-12-01'
rango_prediccion = [inicio,final]
# Graficar los datos
datos_simulados.loc[:,todas_estaciones].plot(subplots=True, figsize=(18, 12)); plt.legend(loc='best')
xticks(rotation='vertical')
# Resumen de vacios en la serie de prediccion
analisis_vacios(datos_simulados,rango_prediccion,todas_estaciones)
# Calcular correlacion entre estaciones
calcular_correlacion(datos_simulados.loc[:,todas_estaciones])
#### Encontrar el periodo que tenga casi toda la serie completa en las tres estaciones
# Periodo de datos para analisis
inicio = '1965-09-01'
final = '1973-05-01'
rango_analisis = [inicio,final]
#seleccionar las estaciones a intervenir
estaciones_train = ['P364','P622','P532']
# Resumen de vacios en la serie de analisis
analisis_vacios(datos_simulados,rango_analisis,estaciones_train)
# Graficar la serie de analisis
datos_simulados.loc[inicio:final,estaciones_train].plot(subplots=True, figsize=(18, 12)); plt.legend(loc='best')
xticks(rotation='vertical')
#### Entrenar el modelo para la predicción
# Regresar los datos a los valores originales
datos_simulados[estaciones_train[2]] = datos[estaciones_train[2]]
# Llenar la serie de datos con los valores promedio
datos_procesar = llenar_serie(datos_simulados,rango_analisis,todas_estaciones)
# entrenar el modelo con tres estaciones para predecir datos
model = entrenar_modelo(datos,datos_procesar,estaciones_train,rango_analisis)
#### Obtener los datos simulados con base al modelo de prediccion
inicio = rango_prediccion[0]
final = rango_prediccion[1]
serie_simulada = pd.DataFrame()
# generar datos simulados
serie_simulada = get_datos_simulados(model,datos_simulados,estaciones_train,rango_prediccion)
if len(serie_simulada)>0:
datos_simulados[estaciones_train[2]] = serie_simulada
#graficar los datos de predicción
#plot(datos.loc[inicio:final].index,serie_simulada,label='Simulado')
datos_simulados.loc[:,estaciones_train[2]].plot(label='Relleno')
#graficar los datos de est3
datos.loc[inicio:final,estaciones_train[2]].plot(figsize=(18, 6),); plt.legend(loc='best')
#### Analizar los datos conforme se rellenan
# Periodo de datos para la predicción
inicio = '1963-01-01'
final = '2006-12-01'
rango_prediccion = [inicio,final]
# Graficar los datos
datos_simulados.loc[:,todas_estaciones].plot(subplots=True, figsize=(18, 12)); plt.legend(loc='best')
xticks(rotation='vertical')
# Resumen de vacios en la serie de prediccion
analisis_vacios(datos_simulados,rango_prediccion,todas_estaciones)
# Calcular correlacion entre estaciones
calcular_correlacion(datos_simulados.loc[:,todas_estaciones])
#### Encontrar el periodo que tenga casi toda la serie completa en las tres estaciones
# Periodo de datos para analisis
inicio = '1978-01-01'
final = '1984-08-01'
rango_analisis = [inicio,final]
#seleccionar las estaciones a intervenir
estaciones_train = ['P364','P622','P121']
# Resumen de vacios en la serie de analisis
analisis_vacios(datos_simulados,rango_analisis,estaciones_train)
# Graficar la serie de analisis
datos_simulados.loc[inicio:final,estaciones_train].plot(subplots=True, figsize=(18, 12)); plt.legend(loc='best')
xticks(rotation='vertical')
#### Entrenar el modelo para la predicción
# Regresar los datos a los valores originales
datos_simulados[estaciones_train[2]] = datos[estaciones_train[2]]
# Llenar la serie de datos con los valores promedio
datos_procesar = llenar_serie(datos_simulados,rango_analisis,todas_estaciones)
# entrenar el modelo con tres estaciones para predecir datos
model = entrenar_modelo(datos,datos_procesar,estaciones_train,rango_analisis)
#### Obtener los datos simulados con base al modelo de prediccion
inicio = rango_prediccion[0]
final = rango_prediccion[1]
serie_simulada = pd.DataFrame()
# generar datos simulados
serie_simulada = get_datos_simulados(model,datos_simulados,estaciones_train,rango_prediccion)
if len(serie_simulada)>0:
datos_simulados[estaciones_train[2]] = serie_simulada
#graficar los datos de predicción
#plot(datos.loc[inicio:final].index,serie_simulada,label='Simulado')
datos_simulados.loc[:,estaciones_train[2]].plot(label='Relleno')
#graficar los datos de est3
datos.loc[inicio:final,estaciones_train[2]].plot(figsize=(18, 6),); plt.legend(loc='best')
#### Analizar los datos conforme se rellenan
# Periodo de datos para la predicción
inicio = '1963-01-01'
final = '2006-12-01'
rango_prediccion = [inicio,final]
# Graficar los datos
datos_simulados.loc[:,todas_estaciones].plot(subplots=True, figsize=(18, 12)); plt.legend(loc='best')
xticks(rotation='vertical')
# Resumen de vacios en la serie de prediccion
analisis_vacios(datos_simulados,rango_prediccion,todas_estaciones)
# Calcular correlacion entre estaciones
calcular_correlacion(datos_simulados.loc[:,todas_estaciones])
#### Encontrar el periodo que tenga casi toda la serie completa en las tres estaciones
# Periodo de datos para analisis
inicio = '1964-01-01'
final = '1983-12-01'
rango_analisis = [inicio,final]
#seleccionar las estaciones a intervenir
estaciones_train = ['P120','P364','P349']
# Resumen de vacios en la serie de analisis
analisis_vacios(datos_simulados,rango_analisis,estaciones_train)
# Graficar la serie de analisis
datos_simulados.loc[inicio:final,estaciones_train].plot(subplots=True, figsize=(18, 12)); plt.legend(loc='best')
xticks(rotation='vertical')
#### Entrenar el modelo para la predicción
# Regresar los datos a los valores originales
datos_simulados[estaciones_train[2]] = datos[estaciones_train[2]]
# Llenar la serie de datos con los valores promedio
datos_procesar = llenar_serie(datos_simulados,rango_analisis,todas_estaciones)
# entrenar el modelo con tres estaciones para predecir datos
model = entrenar_modelo(datos,datos_procesar,estaciones_train,rango_analisis)
#### Obtener los datos simulados con base al modelo de prediccion
inicio = rango_prediccion[0]
final = rango_prediccion[1]
serie_simulada = pd.DataFrame()
# generar datos simulados
serie_simulada = get_datos_simulados(model,datos_simulados,estaciones_train,rango_prediccion)
if len(serie_simulada)>0:
datos_simulados[estaciones_train[2]] = serie_simulada
#graficar los datos de predicción
#plot(datos.loc[inicio:final].index,serie_simulada,label='Simulado')
datos_simulados.loc[:,estaciones_train[2]].plot(label='Relleno')
#graficar los datos de est3
datos.loc[inicio:final,estaciones_train[2]].plot(figsize=(18, 6),); plt.legend(loc='best')
#### Analisis Final
# Periodo de datos para la predicción
inicio = '1963-01-01'
final = '2006-12-01'
rango_prediccion = [inicio,final]
# Resumen de vacios en la serie de prediccion
analisis_vacios(datos,rango_prediccion,todas_estaciones)
print("Correlación Inicial")
calcular_correlacion(datos.loc[inicio:final,todas_estaciones])
# Calcular correlacion entre estaciones
print("Correlación Final")
calcular_correlacion(datos_simulados.loc[:,todas_estaciones])
# exportar los datos a excel
datos_simulados.describe()
datos_simulados.loc[:,todas_estaciones].to_excel('datos_rellenados.xlsx')